Skip to content

#609: #595 Stage 2c — render_content: window/group dividers, tab-drag overlay, tab-hover tooltip - #629

Merged
JDonaghy merged 2 commits into
developfrom
issue-609-595-stage-2c-render-content-window-group
Aug 6, 2026
Merged

#609: #595 Stage 2c — render_content: window/group dividers, tab-drag overlay, tab-hover tooltip#629
JDonaghy merged 2 commits into
developfrom
issue-609-595-stage-2c-render-content-window-group

Conversation

@JDonaghy

@JDonaghy JDonaghy commented Aug 6, 2026

Copy link
Copy Markdown
Owner

Closes #609

Automated PR opened by coordinator for review of issue #609.

…verlay, tab-hover tooltip (Stage 2c)

Ports the three raw-Buffer/Frame writes #601 explicitly scoped out of
TuiShellApp::render_content:

- Window/editor-group divider lines: render_separators (within-group
  :split/:vsplit) and a new group_divider_cells/render_group_dividers
  (between editor groups, split.dividers) now paint through
  Backend::draw_status_bar via a 1-cell "solid StatusBar segment"
  trick -- the same one AppShell::render's own generic divider uses,
  confirming no new quadraui primitive is needed. The #481 phantom-
  divider-beside-scrollbar guard, previously a frame.buffer_mut()
  read-back, is now a pure data computation over RenderedWindow
  geometry shared by draw_frame and render_content alike.
- Tab-drag ghost overlay (render_tab_drag_overlay): dropped its Frame
  parameter; the ghost label now paints via the same draw_status_bar
  trick. Reads TuiShellApp's tui_drag_source/tui_drag_cursor/
  tui_tab_drop_zone, which #602 already wires handle_mouse_event to
  populate.
- Tab-hover tooltip (render_tab_hover_tooltip): sources from the plain
  engine.tab_hover_tooltip field, same trick.

render_all_windows now always paints separators regardless of the
frame: Option parameter, since the underlying paint no longer needs a
raw Buffer.

Adds driver_with_shell coverage for all three (group divider is the
issue's required headless case; tab-drag ghost and tab-hover tooltip
are bonus coverage since both turned out to be reachable without a
real PTY/raw-mode sequence). Updates shell_app.rs's module doc to mark
#609 closed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… window height

- group_divider_cells's left_has_scrollbar check now excludes the
  neighbor window's per-window status-line row, matching
  window_overflows_vertically's own text_rows accounting. Previously
  it spanned the window's full rect height, so an overflowing left
  window with a status line wrongly looked scrollbar-covered on its
  status-line row too, leaving a 1-row gap in the group divider right
  at the neighbor's status bar. Added a direct unit test
  (group_divider_cells_covers_neighbor_status_line_row) that
  regresses this exact scenario.
- Hoisted the repeated backend.set_theme(...) call out of
  render_separators's and render_group_dividers's per-cell divider
  loops (draw_rule_cell_themed/draw_rule_row_themed) instead of
  rebuilding the ~50-field quadraui::Theme on every divider cell via
  draw_rule_row/draw_rule_cell.
- Documented why every divider/rule/ghost/tooltip draw shares the
  literal WidgetId::new("tui:rule") — currently inert, but a landmine
  for a future maintainer wiring hover/press state through this helper.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@JDonaghy
JDonaghy merged commit ed7d01a into develop Aug 6, 2026
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

#595 Stage 2c — render_content: window/group dividers, tab-drag overlay, tab-hover tooltip

1 participant